package br.com.senac.pi.dao;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

import br.com.senac.pi.modelo.Fabricante;
import br.com.senac.pi.modelo.Sorvete;
import br.com.senac.pi.persistence.PersistenceModule;
import br.com.senac.pi.util.FilesType;

public class SorveteDAO {
	
	private PersistenceModule persistenceModule;
	
	public SorveteDAO(PersistenceModule persistenceModule) {
		this.persistenceModule = persistenceModule;
	}
	
	public void persistData(Sorvete sorvete) throws FileNotFoundException {
		Long id = persistenceModule.persistData(sorvete);
		sorvete.setId(id);
	}
	
	public List<Sorvete> getListaCompleta() throws FileNotFoundException {
		List<Sorvete> result = new ArrayList<Sorvete>();
		List<String> dados = persistenceModule.listData(FilesType.SORVETE);
		
		for (String dado : dados) {
			Sorvete sorvete = new Sorvete();
			sorvete.parseData(dado);
			sorvete.setNomeFabricante(getFabricante(sorvete.getFabricante()).getNome());
			result.add(sorvete);
		}
		
		return result;
	}
	
	public void remove(List<Sorvete> sorvetes) throws FileNotFoundException {
		for (Sorvete sorvete : sorvetes) {
			persistenceModule.remove(sorvete);	
		}		
	}

	public void remove(Sorvete sorvete) throws FileNotFoundException {
		List<Sorvete> lista = getListaCompleta();
		if (lista.isEmpty()) {
			System.out.println("Sabor não encontrado...");
		}
		for (Sorvete sorvete2 : lista) {
			if (sorvete2.compare(sorvete)) {
				persistenceModule.remove(sorvete2);
			}
		}
	}
	
	public List<Sorvete> buscaBySorvete(Sorvete sorvete) throws FileNotFoundException {
		List<Sorvete> result = new ArrayList<Sorvete>();
		List<String> dados = persistenceModule.listData(FilesType.SORVETE);
		
		for (String dado : dados) {
			Sorvete sorv = new Sorvete();
			sorv.parseData(dado);
			if (sorv.compare(sorvete)) {
				sorvete.setNomeFabricante(getFabricante(sorvete.getFabricante()).getNome());							
				result.add(sorv);
			}
		}
		
		return result;
	}	
	
	public Fabricante getFabricante(Long id) throws FileNotFoundException {
		Fabricante result = new Fabricante();
		List<String> dados = persistenceModule.listData(FilesType.FABRICANTE);
		Fabricante fab = new Fabricante();
		fab.setId(id);
		
		for (String dado : dados) {
			Fabricante fabricante = new Fabricante();
			fabricante.parseData(dado);
			if (fabricante.compare(fab)) {
				result = fabricante;
				break;
			}			
		}
		
		return result;
	}
}
